iT邦幫忙

0

Golang-排序演算法

  • 分享至 

  • xImage
  •  

這篇文章算是做個紀錄
把工作上遇到的問題,想到其他的解法記錄下來

狀況

  1. 資料因為從map取得,處理過後進到array,而傳遞到前端時是無序狀態
  2. 需要將資料做排序,而資料帶有OrderID,且OrderID不重複

做法

for-交換排序法

  • 時間複雜度=(1+N)*N/2=N^2
  • 優點:省空間
  • 缺點:花時間
package main

type Sample struct {
	Name    string
	OrderID int
}

var sample [100]Sample

func OrderValue() {
	for i := 0; i < len(sample); i++ {
		for j := i + 1; j < len(sample); j++ {
			if sample[i].OrderID > sample[j].OrderID {
				temp := sample[i]
				sample[i] = sample[j]
				sample[j] = temp
			}
		}
	}
}

用空間換時間

  • 時間複雜度=O(N)
  • 優點:省時間
  • 缺點:花空間
package main

type Sample struct {
	Name    string
	OrderID int
}

var sample [100]Sample

func OrderValue() {
	outputSample := make([]Sample, len(sample))

	for index := range sample {
		outputIndex := sample[index].OrderID
		outputSample[outputIndex] = sample[index]
	}
}

總結

用空間換時間是洗澡的時候突然想到的XD
原理就是利用OrderID做為新陣列的index
最後再將該資料插入新陣列


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言